- Published on
부하 테스트를 해보자[1]
이번 글에서는 몇 명의 사용자까지 수용할 수 있을지 측정할 수 있는 부하테스트 해보도록 하겠습니다.
부하 테스트(Load Test) vs 스트레스 테스트(Stress Test)
먼저 비슷하지만 다른 부하 테스트와 스트레스 테스트의 차이점을 알아봅시다.
부하 테스트
부하 테스트는 성능 테스트의 하위 집합으로, 임계치 한계에 도달 할 때까지 시스템의 부하를 지속적으로 지속적으로 증가시켜 시스템을 테스트하는 것을 의미합니다.
부하 테스트 목표
버퍼 오버플로, 메모리 누수 및 메모리 관리 오류와 관련된 애플리케이션의 결함 노출 로드 테스트의 결과로 결국 나올 문제에는 로드 밸런싱 문제, 대역폭 문제, 기존 시스템의 용량 등이 포함될 수 있음
애플리케이션이 향후 예상되는 로드를 관리 할 수 있도록 데이터베이스, 하드웨어, 네트워크 등과 같은 애플리케이션의 모든 구성 요소에 대한 상한을 결정
애플리케이션에 대한 SLA(Service Level Agreement)를 설정
스트레스 테스트
스트레스 테스팅에서는 기존 자원에 초과 작업으로 과부하를 주는 다양한 활동을 수행하여 시스템을 무너뜨리기 위해 시도합니다. 시스템에서 구성 요소 제거를 포함하는 음성 테스트도 스트레스 테스트의 일부로 수행됩니다.
스트레스 테스트 목표
- 충돌 후 보고서를 분석하여 실패 후 애플리케이션의 동작을 정의하는 것
위 두 정의를 보면 알 수 있듯이 부하테스트는 임계치를 알기 위해 선형적으로 부하를 증가시키며 스트레스 테스트는 시스템을 무너뜨려 그 결과를 확인 하기위한 테스트 입니다.
요약
요약하면 아래 표에서 부하 테스트, 스트레스 테스트 및 성능 테스트 간의 주요 차이점을 살펴보겠습니다.
성능 테스트 | 부하 테스트 | 스트레스 테스트 | |
---|---|---|---|
도메인 | 부하 및 스트레스 테스트의 상위 집합 | 성능 테스트의 하위 집합 | 성능 테스트의 하위 집합 |
범위 | 매우 넓은 범위 (부하 테스트, 스트레스 테스트, 용량 테스트, 볼륨 테스트, 내구성 테스트, 스파이크 테스트, 확장 성 테스트 및 안정성 테스트 등) | 성능 테스트에 비해 범위가 좁다. 볼륨 테스트 및 내구성 테스트를 포함한다. | 성능 테스트에 비해 범위가 좁다. soak 테스트 및 스파이크 테스트를 포함한다. |
주요 목표 | 애플리케이션 성능을 벤치 마크 및 표준에 맞춘다. | 시스템의 상한선을 식별하려면 앱의 SLA를 설정하고 시스템이 과부하 볼륨을 처리하는 방법을 확인한다. | 과부하에서 시스템이 작동하는 방식과 장애로부터 복구하는 방식을 테스트하면서 알아낸다. 앱이 기본적으로 예기치 않은 트래픽 급증에 다운되지 않도록 대비한다. |
부하 제한 | 임계치 이전과 초과된 경우 모두 검사 | 임계치 이전까지 검사 | 임계치를 초과한 경우 검사 |
학습된 속성 | 리소스 사용량, 안정성, 확장성, 리소스 사용량, 응답 시간, 처리량, 속도 등 | 과부하 수준에서 최대 성능, 서버 처리량, 응답 시간 (임계치 값 미만), H/W 환경의 적절성, 처리 할 수 있는 사용자 앱 수, 부하 분산 요구 사항 등 | 대역폭 용량, 응답 시간 이상의 안정성 (임계치 값 초과) |
얻은 결과 | 런타임 팽창, 최적화 범위, 속도, 지연 시간, 처리량 등과 관련된 문제를 포함한 모든 성능 버그. 기본적으로 – 성능과 관련된 모든 것! | 부하 분산 문제, 대역폭 문제, 시스템 용량 문제, 응답 시간 부족, 처리량 문제 등 | 과부하, 과부하 상황에서의 데이터 손상 문제, 속도 저하, 메모리 누수 등의 보안 허점 |
Jmeter vs Locust
Apache Jmeter와 Locust는 현재 개발자 사이에서 가장 많이 알려진 인기있는 성능 테스트 도구입니다.
이 두가지를 간단히 알아보면
Jmeter
Jmeter는 가장 먼저 출시된 성능 테스트 프레임워크중에 하나입니다. 순수 자바로 작성되었습니다. Jmeter는 Web 및 FTP 관련 어플리케이션의 부하 테스트를 수행할 목적으로 제작되었습니다.
Locust
Locust는 Python으로 작성된 성능 테스트 프레임워크입니다. 가장 큰 특징은 Python으로 성능 스크립트를 작성할 수 있다는 점입니다.
더 자세한 비교는 여기서 알아보실 수 있고 Python에 익숙한 저는 가볍고 Python을 사용한 Locust를 사용하여 테스트 해보겠습니다.